package cn.tedu.charging.order.mqtt;

import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * MQTT生产者 pub
 * 消息的发送者
 * 订单服务 给EMQX 发送消息的 客户端
 *
 * @Configuration    @Component 区别
 * 都是让spring 容器管理
 * Configuration 一个是配置相关的 组件
 * Component 一个是和具体业务无关 组件
 */
@Slf4j
@Component
public class MqttProducer {

    /**
     * 别的 在容器中的类 (@Component) 可以通过注入的方式 使用 MqttClient
     */
    @Autowired
    private MqttClient mqttClient;

    /**
     * 通过MQTTClient 发送消息 到EMQX
     * @param topic 主题 todo topic 是干啥用的？
     * @param message 消息
     */
    public Boolean send(String topic, String message) {
        // void publish(String topic, byte[] payload, int qos, boolean retained)
        /**
         * topic 主题 用来传递消息 用来区分消息
         * 消息 message.getBytes() 字符串的方法 转换String为字节数组
         * 质量 todo
         * 保留 todo
         */
        try {
            mqttClient.publish(topic, message.getBytes(), 0, false);
            return true;
        } catch (MqttException e) {
            log.error("给EMQX发送消息失败，Topic:{},消息:{}",topic,message,e);
        }
        return false;
    }

}